package cn.tedu.csmall.cart.webapi.kafka;

import cn.tedu.csmall.commons.pojo.cart.model.CartTb;
import com.google.gson.Gson;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;


// 因为Kafka接收消息的功能在SpringBoot中配置,所以当前类也必须保存在Spring容器中,才能生效
@Component
public class Consumer {

    // SpringKafka接收消息依靠的是一个监听机制
    // SpringKafka提供一个监听线程,实时关注Kafka的消息往来
    // 如果有消息使用指定的话题名称(myCart)发送到kafka,就会自动调用下面的方法
    @KafkaListener(topics = "myCart")
    // 下面的方法会在kafka中出现话题名称为myCart时运行,而且方法的参数就是消息对象
    public void received(ConsumerRecord<String,String> record){
        // 方法参数类型必须是ConsumerRecord
        // ConsumerRecord<[话题类型],[消息类型]>
        // record就是消息本身,下面获得具体的值
        String json=record.value();
        // 将json格式字符串转换为java对象
        Gson gson=new Gson();
        // 执行转换时,还有额外指定转换目标类型的反射
        CartTb cart=gson.fromJson(json,CartTb.class);
        System.out.println("接收到消息:"+cart);

    }
}
